<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<!-- <script src="../../baseCode/src/vuedev.js"></script> -->
		<!-- 引入样式 -->
		<!-- <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> -->
		<!-- 引入组件库 -->
		<!-- <script src="https://unpkg.com/element-ui/lib/index.js"></script> -->
		<title></title>
	</head>
	<body>
		<!-- data-v="123123123123" -->

		<!-- 	<div id="app">
			<el-row><el-button @click="add">添加</el-button><el-input v-model="text"></el-input></el-row>
			<el-table :data='dataList'>
				<el-table-column prop="name" label='姓名'></el-table-column>
				<el-table-column prop="age" label='年龄'>
				</el-table-column>
			</el-table>
		</div> -->

		<script>
			/**
			 *	@fun 演练场
			 */

			// new Vue({
			// 	el: '#app',
			// 	data: {
			// 		dataList: [],
			// 		text: ''
			// 	},
			// 	methods:{
			// 		add () {
			// 			this.dataList.push({
			// 				name: '小明',
			// 				age: this.text
			// 			})
			// 			this.text = ''
			// 		}
			// 	}
			// })

			// let data = []
			// for(let i = 0; i < 5; i++) {
			// 	data = data.map(item => [...item,i])
			// }
			// console.log(data);

			// const data = [{
			// 		'billId': 'a92724d435cc-9ccb-6144-3503-eaaf029f',
			// 		'billNo': 'L.01.01.001.001',
			// 		'classId': 'a927248c1df6-a491-e74a-6acb-f1457483',
			// 		'classIdPath': 'a927247cb7b1-980c-724d-300a-7fdc7a5b/a9272482b13c-880c-c643-5d90-5ca0c5e7/a927248c1df6-a491-e74a-6acb-f1457483',
			// 		'className': 'Ⅰ级钢筋',
			// 		'classNamePath': '主要材料/建筑钢材/Ⅰ级钢筋',
			// 		'materialName': 'φ6.5',
			// 		'spec': null,
			// 		'unit': 'KG',
			// 	},
			// 	{
			// 		'billId': 'aa281919c21f-a1cb-1548-2241-5bfedcdd',
			// 		'billNo': 'L.01.01.001.001',
			// 		'classId': 'a927248c1df6-a491-e74a-6acb-f1457483',
			// 		'classIdPath': 'a927247cb7b1-980c-724d-300a-7fdc7a5b/a9272482b13c-880c-c643-5d90-5ca0c5e7/a927248c1df6-a491-e74a-6acb-f1457483',
			// 		'className': 'Ⅰ级钢筋',
			// 		'classNamePath': '其他材料/建筑钢材/Ⅰ级钢筋',
			// 		'materialName': '高线',
			// 		'spec': '',
			// 		'unit': 't'
			// 	},
			// 	{
			// 		'billId': 'a92724d92bf1-b794-9f49-b368-eb58c894',
			// 		'billNo': 'L.01.01.001.002',
			// 		'classId': 'a927248c1df6-a491-e74a-6acb-f1457483',
			// 		'classIdPath': 'a927247cb7b1-980c-724d-300a-7fdc7a5b/a9272482b13c-880c-c643-5d90-5ca0c5e7/a927248c1df6-a491-e74a-6acb-f1457483',
			// 		'className': 'Ⅰ级钢筋',
			// 		'classNamePath': '主要材料/主要钢材/Ⅰ级钢筋',
			// 		'materialName': 'φ8',
			// 		'spec': null,
			// 		'unit': 'KG',
			// 	},
			// ]

			// [
			// 	{
			// 		name: '主要材料',
			// 		children: [
			// 			{
			// 				name: '建筑钢材',
			// 				children: [
			// 					{
			// 						name: 'Ⅰ级钢筋',
			// 						chilren: [
			// 							{
			// 								name: 'φ6.5',
			// 							},
			// 						]
			// 					}
			// 				]
			// 			},
			// 			{
			// 				name: '主要钢材',
			// 				children: [
			// 					{
			// 						name: 'Ⅰ级钢筋',
			// 						chilren: [
			// 							{
			// 								name: 'φ8'
			// 							}
			// 						]
			// 					}
			// 				]
			// 			}
			// 		]
			// 	},
			// 	{
			// 		name: '其他材料',
			// 		children: [
			// 			{
			// 				name: '建筑钢材',
			// 				children: [
			// 					{
			// 						name: 'Ⅰ级钢筋',
			// 						chilren: [
			// 							{
			// 								name: '高线',
			// 							},
			// 						]
			// 					}
			// 				]
			// 			}
			// 		]
			// 	}
			// ]

			// const root = []
			// const children = []
			// const twoChildren = []
			// const treeChildren = []
			// for (const item of data) {
			// 	const classNames = item.classNamePath.split('/')
			// 	const o3 = {
			// 		className: item.materialName
			// 	}
			// 	if (treeChildren.length > 0) {
			// 		// 查找是否有重复的单据
			// 		const isRepetition = treeChildren.map(m => m.className).includes(o3.className)
			// 		if (!isRepetition) {
			// 			treeChildren.push(o3)
			// 		}
			// 	} else {
			// 		treeChildren.push(o3)
			// 	}
			// 	const o2 = {
			// 		className: classNames[2],
			// 		children: treeChildren
			// 	}
			// 	if (twoChildren.length > 0) {
			// 		// 查找是否有重复的单据
			// 		const isRepetition = twoChildren.map(m => m.className).includes(o2.className)
			// 		if (!isRepetition) {
			// 			twoChildren.push(o2)
			// 		}
			// 	} else {
			// 		twoChildren.push(o2)
			// 	}
			// 	const o1 = {
			// 		className: classNames[1],
			// 		children: twoChildren
			// 	}
			// 	if (children.length > 0) {
			// 		// 查找是否有重复的单据
			// 		const isRepetition = children.map(m => m.className).includes(o1.className)
			// 		if (!isRepetition) {
			// 			children.push(o1)
			// 		}
			// 	} else {
			// 		children.push(o1)
			// 	}
			// 	const top = {
			// 		className: classNames[0],
			// 		children
			// 	}
			// 	if (root.length > 0) {
			// 		const isRepetition = root.map(m => m.className).includes(top.className)
			// 		if (!isRepetition) {
			// 			root.push(top)
			// 		}
			// 	} else {
			// 		root.push(top)
			// 	}
			// }

			// console.log(root);

			// const vm = new Vue({
			// 	el: '#app',
			// 	data: {
			// 		list: []
			// 	},
			// 	created() {
			// 		this.list = '1'
			// 	}
			// })

			// class SuperTask {
			// 	constructor(parallelCount = 2) {
			// 		this.parallelCount = parallelCount;
			// 		this.tasks = [];
			// 		this.runningCount = 0;
			// 	}

			// 	add(task) {
			// 		return new Promise((resolve, reject) => {
			// 			this.tasks.push({
			// 				task,
			// 				resolve,
			// 				reject
			// 			});
			// 			this._run();
			// 		})
			// 	}

			// 	_run() {
			// 		while (this.runningCount < this.parallelCount && this.tasks.length > 0) {
			// 			const {
			// 				task,
			// 				resolve,
			// 				reject
			// 			} = this.tasks.shift();
			// 			this.runningCount++;
			// 			task().then(resolve, reject).finally(() => {
			// 				this.runningCount--;
			// 				this._run()
			// 			})
			// 		}
			// 	}

			// }

			// const superTask = new SuperTask()

			const data = [
				{
					billId: 'a92724d435cc-9ccb-6144-3503-eaaf029f',
					billNo: 'L.01.01.001.001',
					classId: 'a927248c1df6-a491-e74a-6acb-f1457483',
					classIdPath:
						'a927247cbb1-980c-724d-300a-7fdc7a5b/a9272482b13c-880c-c643-5d90-5ca0c5e7/a927248c1df6-a491-e74a-6acb-f7483',
					className: 'Ⅰ级钢筋',
					classNamePath: '主要材料/建筑钢材/Ⅰ级钢筋',
					materialName: 'φ8',
					spec: null,
					unit: 'KG'
				},
				{
					billId: 'aa281919c21f-a1cb-1548-2241-5bfedcdd',
					billNo: 'L.01.01.001.001',
					classId: 'a927248c1df6-a491-e74a-6acb-f1457483',
					classIdPath:
						'a927247cb7b1-980c-724d-300a-7fdca5b/a9272482b13c-880c643-5d90-5ca0c5e7/a927248c1df6-a491-e74a-6acb-f1457483',
					className: 'Ⅰ级钢筋',
					classNamePath: '其他材料/建筑钢材/Ⅰ级钢筋',
					materialName: '高线',
					spec: '',
					unit: 't'
				},
				{
					billId: 'aa281919c21f-a1cb-1548-2241-5bfedcdd',
					billNo: 'L.01.01.001.001',
					classId: 'a927248c1df6-a491-e74a-6acb-f1457483',
					classIdPath:
						'a927247cb7b1-980c-724d-300a-7fdca5b/a9272482b13c-880c643-5d90-5ca0c5e7/a927248c1df6-a491-e74a-6acb-f1457483',
					className: 'Ⅰ级钢筋',
					classNamePath: '其他材料/其他钢材/Ⅰ级钢筋',
					materialName: '高线',
					spec: '',
					unit: 't'
				},
				{
					billId: 'a92724dbf1-b794-9f49-b368-eb58c894',
					billNo: 'L.01.01.001.002',
					classId: 'a927248c1df6-a491-e74a-acb-f1457483',
					classIdPath:
						'a927247cb7b1-980c-724d-300a-7fdc7a5b/a9272482b13c-880c-c643-5d90-5ca0c5e7/a927248c1df6-a491-e74a-6acb-f1457483',
					className: 'Ⅰ级钢筋',
					classNamePath: '主要材料/建筑钢材/Ⅰ级钢筋',
					materialName: 'φ8',
					spec: null,
					unit: 'KG'
				}
			];

			const modifiedData = data.map((item) => ({
				...item,
				classNamePath: item.classNamePath.replace(/\/([^/]+)\//, '/$1')
			}));

			const result = [];

			modifiedData.forEach((item) => {
				const pathParts = item.classNamePath.split('/');
				let currentLevel = result;

				pathParts.forEach((part, index) => {
					const existingNode = currentLevel.find(
						(node) => node.label === part
					);

					if (existingNode) {
						currentLevel = existingNode.children;
					} else {
						const newNode = { label: part, children: [] };
						currentLevel.push(newNode);
						currentLevel = newNode.children;
					}

					if (index === pathParts.length - 1) {
						currentLevel.push({
							label: item.materialName,
							children: []
						});
					}
				});
			});

			console.log(JSON.stringify(result, null, 2));

			// /**
			//  * 先使用对象结构记录数据，方便查找。
			//  */
			// let objData = {};
			// data.forEach((item) => {
			//     // 只分割第一个/
			//     const [firstName, secondName] = item.classNamePath.split(/\/(.*)/s);
			//     const thirdName = item.materialName;
			//     const secondData = {
			//         className: secondName,
			//         children: [
			//             {
			//                 className: thirdName
			//             },
			//         ]
			//     };

			//     if (!(firstName in objData)) {
			//         // 一级名称的材料还没有添加过
			//         objData[firstName] = {
			//             children: [secondData]
			//         }
			//     } else {
			//         // 查找是否有同名的二级材料
			//         const found2 = objData[firstName].children.find(sData => sData.className === secondName);
			//         if (!found2) {
			//             objData[firstName].children.push(secondData);
			//         } else {
			//             // 查找是否有同名的三级材料
			//             const found3 = found2.children.find(tData => tData.className === thirdName);
			//             if (!found3) {
			//                 found2.children.push(secondData.children[0]);
			//             }
			//         }
			//     }
			// });

			/**
			 * 转换成数组结构
			 */
			// let listData = [];
			// Object.entries(objData).forEach(([firstName, firstData]) => {
			//     firstData.className = firstName;
			//     listData.push(firstData);
			// });

			// console.log(JSON.stringify(listData, null, 2));
		</script>
	</body>
</html>
